{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# ART GRAPHITE Blackbox Attack\n",
    "\n",
    "First, setup all related imports."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "import warnings\n",
    "warnings.filterwarnings('ignore')\n",
    "\n",
    "from keras.models import load_model\n",
    "\n",
    "from art import config\n",
    "from art.utils import load_dataset, get_file\n",
    "from art.estimators.classification import KerasClassifier\n",
    "from art.attacks.evasion import GRAPHITEBlackbox\n",
    "\n",
    "import numpy as np\n",
    "\n",
    "#%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from tensorflow.python.framework.ops import disable_eager_execution\n",
    "\n",
    "disable_eager_execution()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Model and Data Definition\n",
    "\n",
    "Second, load the data and models to perform an attack."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From /home/rtfeng/.local/lib/python3.8/site-packages/keras/layers/normalization/batch_normalization.py:514: _colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Colocations handled automatically by placer.\n"
     ]
    }
   ],
   "source": [
    "(x_train, y_train), (x_test, y_test), min_, max_ = load_dataset('cifar10')\n",
    "\n",
    "num_samples_train = 100\n",
    "num_samples_test = 100\n",
    "x_train = x_train[0:num_samples_train]\n",
    "y_train = y_train[0:num_samples_train]\n",
    "x_test = x_test[0:num_samples_test]\n",
    "y_test = y_test[0:num_samples_test]\n",
    "\n",
    "class_descr = ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']\n",
    "\n",
    "path = get_file('cifar_resnet.h5',extract=False, path=config.ART_DATA_PATH,\n",
    "                url='https://www.dropbox.com/s/ta75pl4krya5djj/cifar_resnet.h5?dl=1')\n",
    "classifier_model = load_model(path)\n",
    "classifier = KerasClassifier(clip_values=(min_, max_), model=classifier_model, use_logits=False,\n",
    "                             preprocessing=(0.5, 1))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Get Target and Init Images\n",
    "\n",
    "Third, view the example initialization and target images to perform the attack with."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Target image is:  0\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Init image is:  8\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPsAAAD5CAYAAADhukOtAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAb70lEQVR4nO2da4ydV3WG33Xucx/PjG+xDXYSF0jSkEQmpUqLKGkjF6ECRVCohPKD1q1UpCK1PyIqFfqPVoWKHxWSKVFDSymoQEkr1ELSVhFVRTEQEqdOSBocZ+KJnRnHHs/lzLmt/pgTyUn3u2Y8lzOT7PeRRnNmr9nf3t8+3zrfOfs9ay1zdwghXvsUtnoCQojeIGcXIhPk7EJkgpxdiEyQswuRCXJ2ITKhtJ7OZnYUwGcBFAH8lbt/Kvr/8fFxP3DgQNKWowRoZls9hWXWuPRhN3pqQS9f63rwY7IljuZufPKbcp2u5Tpg85icnMTMzEzygGt2djMrAvhLAL8CYBLA983sfnf/H9bnwIEDeOCBB5K2VqsVjbXWaW5rts15Rddv5JtRN/Ke0YNeBdZppcGsw03E5oFDW/CGd7s7+1133UX7rOdt/O0AnnL3p929AeDvAbx7HccTQmwi63H2fQCeveLvyW6bEGIbsh5nT733+H/vLczsmJmdMLMTMzMz6xhOCLEe1uPskwCu3G3bD+DsK//J3Y+7+xF3PzI+Pr6O4YQQ62E9zv59AIfN7JCZVQB8EMD9GzMtIcRGs+bdeHdvmdlHAfwrlqW3e939saiPmaFYLK51yNcc22Y3PsA6bWoL96UL6XPrBLvg8ODaCGQ5KwTSG9hOfTT7V+9ufHSsdens7v4tAN9azzGEEL1B36ATIhPk7EJkgpxdiEyQswuRCXJ2ITJhXbvxV4u7U8kgx6i3Xp5zKO9E83AeZBKqaFRG4/eXpSYPhiqVy3ywNp9j0dayxsE5bxPWcu3ozi5EJsjZhcgEObsQmSBnFyIT5OxCZEJPd+PNjO4KvxqCQhiveiUhWPp2cG7e4R1bnfSOdrPFA2uefPppatu9Zxe1dRoNats5tiPZXqvy3f3Oq+D5XIu/6M4uRCbI2YXIBDm7EJkgZxciE+TsQmSCnF2ITHhVBMK8mmW5iLWe18ZLfXwexXKF2tpBXrjFuaVk+8VL87TPuekL1NY3NEBt40ND1Faw9P0sqvrCqsisi+C57tXVrTu7EJkgZxciE+TsQmSCnF2ITJCzC5EJcnYhMmFd0puZnQZwGUAbQMvdj6zw/yiQskBRBFUvCdSkFeodpYnktcIapbd2INZ0SLRZschf1xuNJrW9MDNLbbPzdWpbXEpHt80vpCU5AChU+6ltfpFHtg328yemRUxcUAxVsk2hV9LyRujsv+Tu0xtwHCHEJqK38UJkwnqd3QF828x+YGbHNmJCQojNYb1v4+9w97NmtgvAd8zscXd/6Mp/6L4IHAOA/fv3r3M4IcRaWded3d3Pdn+fB/ANALcn/ue4ux9x9yMTExPrGU4IsQ7W7OxmNmBmQy89BnAXgJMbNTEhxMaynrfxuwF8oysblAD8nbv/S9Sh0+lgfmGRGLl8UiqmSwl50KdYYuWHYpsF5YKYLFforO01sxDFOwVyzNwSl7xYRFxfiT/V9aDs0lQgvZ1/kds65NyaTAsDsHB5jo8VRMRNPjdFbTccvjbZft1B/pGy6DwpZhhx6MF1EKlrxBZVrmLXjgUDrdnZ3f1pAG9ea38hRG+R9CZEJsjZhcgEObsQmSBnFyIT5OxCZEJPE062Oh1cXExHPQ3284SChVK6Lle7wyWjUA0LZJBiYCsQ7c0Ka3zNXGOSzeennqO2sbGxZHtfjcd5LdUXqK2/yvvt2cm/JOVkkecXuGw4UOFjNepEsgVQLPAEkXNL6eutFSWANO4WcbLP6Jhr6BX0odOIrl9uEkK8lpCzC5EJcnYhMkHOLkQmyNmFyISe7sZbsYTS8HjS1g52tJsFErhiPGAhsrU73FaIdshZ6aq1JKdDnO+OpOoDALQaPI+bsSCOQLkYDUorNZvBuRXTKgkA9A+mSzJFu/FWrAY2viDVPj4PIwvZImWhAMCj6k9rfM6iBIZs9vHhrv6a051diEyQswuRCXJ2ITJBzi5EJsjZhcgEObsQmdBT6W165gLu/eLfJm0W5JMrk0CYwaEa7XP9oddR21tuvoHaSsHLH8t5FwVHeKTHBNERrUAq20GCXQCgUk2vCQtMAYBKhUte4zt4vj4Ht5VIUEslyIWHMn8+6y2+HhdnX+S2S5eS7ZcvXaR9mixPIhAmhhsfH6W2w9enc+EBQLmSXpNIXWOSYoTu7EJkgpxdiEyQswuRCXJ2ITJBzi5EJsjZhciEFaU3M7sXwLsAnHf3m7ptYwC+AuAggNMAPuDuXP/o4p0OFknUU2ORR0OViVxzOa2qAAD6A4mn/aY3UlvdG9RWINJbtdJH+0TySTuS7AJZbmRsJ7UVWL8gqrDR4WFexSAvHILIMXbEThD9dfqZp6ntufPnqe3CzAy1LS6mZbT2EpfyGov8Glha4vn69h/YTW2vO8DLTQ0Q6S2KlGNSahQLt5o7+18DOPqKtnsAPOjuhwE82P1bCLGNWdHZu/XWX1lV790A7us+vg/AezZ4XkKIDWatn9l3u/sUAHR/79q4KQkhNoNN36Azs2NmdsLMTizOz2/2cEIIwlqd/ZyZ7QWA7m+6e+Lux939iLsf6Rvg6Y+EEJvLWp39fgB3dx/fDeCbGzMdIcRmsRrp7csA3g5gwswmAXwCwKcAfNXMPgLgDID3r2awHaM78IFff1/SthREGg30paUtC4SGPipnABYkFJydnaW2TquZbC+XeLRWqY/bvMSjxhabXP7xDj+3ApHYWOQgAJSCeZTLQUmjwtVLh81Abqx30usLAAPDg9S2Y5RHm7Ub6WPWilwuvTjDNd3J505T2/WHrqe2YiGQgsmaFAP5dQ35Jld2dnf/EDHdefXDCSG2Cn2DTohMkLMLkQlydiEyQc4uRCbI2YXIhJ4mnIQ7Os207lUMXneYMDRY4V/S6avxJIqLdS6vLTR5HbjTT59OtleCqLfXHXo9tf302bPU9s//8iC1NQtcRqtV01Fq/cF6DATy4MjwMLWNjqTruQHArbfenGzfObGD9rlu/z5qKxiXB4tB9F2jnq6LVwqksMVdPKHnNXu5zHfNvr3U1m7z62phIS0PMskZiAIOuVynO7sQmSBnFyIT5OxCZIKcXYhMkLMLkQlydiEyoafS24uXZvGP//TtpK3T5BFPBaQjwAYr/bTPUCAZHTzMk//tHOfRVeN70/XjxiZ4op7aAJe1Lp56htpOnnqW2haDkCcWwFYKIgSHgjle/zouHf787bdR2/hAWpYbKPJLzoPyZY0GTxDZaqflNQBYIDXdmm1+vfX18/UYHeVy77nnz1Hb9PQrM7tdMd5AWmLbvYdfV/39aSm1HSQP1Z1diEyQswuRCXJ2ITJBzi5EJsjZhciEnu7GLyws4sSPTiZttTIvM9RYSgeulCv8tern3voWanvmOb7TPTNFTbjpxhuT7ZUgkGRhieeSKwfBKbfelg4kAYD6It99rpTTT+nhaw/RPje+6Q3Uds0ED/wY7ueBGp16+ryfff4F2uf8i7yC2NQ07zc/x1OUX7yY3o1vNPkaloP8hZUqf67bLa54NJtcTegfTSsXNyF9vQHACAlCarb4OLqzC5EJcnYhMkHOLkQmyNmFyAQ5uxCZIGcXIhNWU/7pXgDvAnDe3W/qtn0SwG8DeEkP+bi7f2ulY7UaDbwwmQ7+GNvBc5Pt258OCLjh5sO0T7nKoyoee/i/qW13jUsrg5bOI3Z+mut1A8Mj1DY+zMf6taNvo7ZCkHNtZCQ93sT4OO1z4cIMtf30mSep7dJFnstv9tLlZPvl2QXa52JQ5ffCLC/J1AqCqMrldL6+SpXn8SsUg/Ud5tfVaFCGascunq+v2p8O6Kr08UCvucV6sr0TBEmt5s7+1wCOJtr/wt1v6f6s6OhCiK1lRWd394cA8Pg8IcSrgvV8Zv+omT1iZveaGX8PLoTYFqzV2T8H4DoAtwCYAvBp9o9mdszMTpjZiVaLf3VUCLG5rMnZ3f2cu7fdvQPg8wBuD/73uLsfcfcjpRL//rsQYnNZk7Ob2ZWlL94LIB3dIoTYNqxGevsygLcDmDCzSQCfAPB2M7sFgAM4DeB3VjNYY6mO537yP0nb7DDP/fauu3432X706J20zwP/ls51BwC7SJQRAOzqD0pKldKyS8143q/dIzwX3lBgqwV50FpBPjkWldVq8zk+/8Rz1HbmPM+r1mgGufBq6XUcGuKllXbVuNTUbHB5LaJcSUtsxUBei2xDQ/zaGR7mtmKRS3Zz82k58ty5adqnXk/3aQTrtKKzu/uHEs1fWKmfEGJ7oW/QCZEJcnYhMkHOLkQmyNmFyAQ5uxCZ0NOEk95po76Qjmz62TffRPu94853JNvHR3kk1x0/F0SNFYJSSGWeBHJ4MC0nFStcJitVeFJGD+bRISWvAODSizxKbbiUnn8HpC4UgGvfwNd+1/6fobYLL/KotyESAdZs83M25/eecoHPvxOUPKrX09Fhc/NztI930tGNADC3wPs9O8WjH+uLPNqvuZCeY7vN59E/kH6eW0o4KYSQswuRCXJ2ITJBzi5EJsjZhcgEObsQmdBT6a1S68fB69+ctP3Gh3+L9ltopyOXnniKR2R1jCcUrAURdk3n0UkXLhIppMNllXZ7kdosWP0OeC2yy7PpZI4AUDyXjno6e/487bO0xCOlOnUu5QwEEYJPPzmZbP/pmTO0j5X4czY2wWXWxhJfq0uX0okqZ6Z5RJkHklehwGU+C2wDfVyCHSURgrWgFuDiXPq68iC6UXd2ITJBzi5EJsjZhcgEObsQmSBnFyITerobv2NsDO/7zd9M2/bsp/1+fDK9sxvl22oEwRHtICjEO0FuMqR36i3ICdcOdkc96FcIX4Z5v2YrPd70DFcuWi2uGAQbzBgd5uWOGo30DvmFGV7iCUX+vExPp4NFAGCpyeffImWS2g0eaFSscLfor/EMydUor12Ln1ujzq5jrgr0DZDgKy4m6c4uRC7I2YXIBDm7EJkgZxciE+TsQmSCnF2ITFhN+acDAL4IYA+ADoDj7v5ZMxsD8BUAB7FcAuoD7v5idKyFhQX86OETSdsjjz7M54B0EEGxyAMnSkEuuWKJ54wD+DGLRBoqVfhrZq3GxyqX+ViVKp9/IchrV/T0MYcrvKp2oRoEBhW5/FNv8yCZFlEHK/1BiacFHtCyMM/z3TVavJ81iawVaJuNIE9em5RqAoD5y3we/YGct3Mkvf6loAQYqWoFW6f01gLwB+7+JgBvBfB7ZnYDgHsAPOjuhwE82P1bCLFNWdHZ3X3K3X/YfXwZwCkA+wC8G8B93X+7D8B7NmuSQoj1c1Wf2c3sIIBbAXwPwG53nwKWXxAA7NroyQkhNo5VO7uZDQL4GoCPuTv/APX/+x0zsxNmdqKxxL/WKITYXFbl7GZWxrKjf8ndv95tPmdme7v2vQCSqVDc/bi7H3H3I5Uq31gSQmwuKzq7mRmW67GfcvfPXGG6H8Dd3cd3A/jmxk9PCLFRrCbq7Q4AHwbwqJm9pI99HMCnAHzVzD4C4AyA9690oLm5WXz3oQeStoXZi7RfpZyWa/r6h4LR+KkVnds8eP0rlJn0xvWOWpXLJ1GOsUqNS1Slfp6PrVYZSR+vEMiUwUu+1fi5mQXRd0vpqLIlEoUGAM0mj0TrWBB+F8yjxCIEg3JSqPK1GhmIbPy6GuwLouXK6XMrG4/qtDaR+TxaixVw9++CB87duVJ/IcT2QN+gEyIT5OxCZIKcXYhMkLMLkQlydiEyoacJJ8ulInbvHE7aphZfoP3a7bQsNzw2RvuUgvJPs9M8OO/yLE+I2GynpaFOEHXlQeLLkEAqq/TxbyZ7Ob2+raDWVCHQ3vqDCLuBPi4PtpskIq7DpSFU+TwskjeDiLI+Im+ODfLSVfsHuaS7f+8EtQVBaliq85JdBU/LkaUiP+fRYRYJyvvozi5EJsjZhcgEObsQmSBnFyIT5OxCZIKcXYhM6Kn0Bu/Am+mEfSMDPCrocj0tTTTbc7TPG954I5/GXi7ZvTA9Q23nZ6aT7XMXeVLGhQWeoLAdJGzstHh02EApHdkGAG+8+bpk+9lZLv28EEQcLja4FLlY58lIWF28apk/zwNBAs7RAS4B7hzlNef2XLMn2X79vt20z64qj4ibCxJfXrjA5eNikJS0fyCdDHRwiJ/z+Hi6T6kUSKzUIoR4TSFnFyIT5OxCZIKcXYhMkLMLkQk93Y1vNRuYOTuZtLWbfPd5keQRW3j2DO0zFpSGmqjxIIjyEt897yukg1oWizy4w53vuAN8Fz/Kq7awmFYFAOAX35JWIW5808/SPmfOPENtMxd50NASyTMHgAa8lILcb30Ffs4TQb6+0QH+fLbJGj8/za+dJ6anqM1qXE0Y3sVzA/YN8+Ca/qH0/Mcm+PEGR9KKDCtRBujOLkQ2yNmFyAQ5uxCZIGcXIhPk7EJkgpxdiExYUXozswMAvghgD4AOgOPu/lkz+ySA3wbw0rf/P+7u34qOVS6XsIcEoUyeSUtyANBaIvKVcVnrpz95gtouVXjutOjVb76TLscz3+JlejpBsAtYaSIAReO5xKJ8Zj/8z28n298+MEj73FTgZ704wiWjTotLh9ZKn3e9wSXWS6ykEXgQEgA88/g5apteTAeu1Mt8fft28UCpHXt40E11mF9XxaD8U/9IOm9gtZ9LilZkrsvPazU6ewvAH7j7D81sCMAPzOw7XdtfuPufr+IYQogtZjW13qYATHUfXzazUwD2bfbEhBAby1V9ZjezgwBuBfC9btNHzewRM7vXzNIBtkKIbcGqnd3MBgF8DcDH3H0WwOcAXAfgFizf+T9N+h0zsxNmdqIVfMYTQmwuq3J2Mytj2dG/5O5fBwB3P+fubXfvAPg8gNtTfd39uLsfcfcjpVJQE1sIsams6OxmZgC+AOCUu3/miva9V/zbewGc3PjpCSE2itXsxt8B4MMAHjWzh7ttHwfwITO7Bcv60WkAv7PSgcrVMg4cPpC0zQa5veYnmezCZYZ6IHldaPGSTJWgTFKDRLC1Pfh44msr/2TOzy1Q5fDUI99Ptj97mcuDOws815k7lwfbgWQ3RyIEnyeljgDgqSDicDIosbXQz5+zoQN7k+27D72e9qmNpqUwAEAhcJkiX4/BQS599pOIuEKZR/q5kbGCa2M1u/HfJYcINXUhxPZC36ATIhPk7EJkgpxdiEyQswuRCXJ2ITKhpwkni6UShnekI4p27t5F+00R6S1QGVi+QwDAUpDosRn0YxJbG2uT1yI8iIiLTry5mC7JND/NSxMVqjySq7jEpbKzwTo+jLRU9lSJr9X8IE8SOrCffxt75zXXUNv4znSZp+oAj1BrBGvvgZRaDb40VoxsJElkMSrlRBNL8otDd3YhMkHOLkQmyNmFyAQ5uxCZIGcXIhPk7EJkQk+lt4IV0EfqrFWDWl7lSvo1qd3kMkgQNIZWUEcNkYzGukWDBVFjEZ0gtM0D21wnPf/HGzyibKTCo94er/Nkjo+15qntAkm+OHbgEO2z9yCX0EZJolIAqAbJNAud9Fo1AwmtWOLJIYtBJFqpwvtZgT9n7XZawrTgeS6QqLdIjtadXYhMkLMLkQlydiEyQc4uRCbI2YXIBDm7EJnQU+nNATRJIsj5RV6/bGi0lmyvz/MkhG0iQQFAmyXrA9COlDJitDAdfiSGcDyQ85zW+QLmC+n1/W7jEu3zzEKQnLOfr1Vpdzp5KADs2bcz2X5o5wTtMz4yTm2FQF6bD6LU6kRmjdKa1wIZuBbUXytV0tcpANT6eJRdtZbuVy7zKMC1oDu7EJkgZxciE+TsQmSCnF2ITJCzC5EJK+7Gm1kNwEMAqt3//wd3/4SZjQH4CoCDWC7/9AF3fzE6lnsHzXZ6B71Y4TuqO3amd0CbgzzwoBUEyQQmNINdfCe78aTSEQDAgt34KNAhCnZBie/Slkok8KOPr9XSCA8yuXaE5wbcMcbLJA0Opy+twX6+C16t8cuxHlQAbgS58JzsaBfLwaUfrX1gKweBMFEOujKZC8tNB/AchZGYtJo7+xKAd7j7m7Fcnvmomb0VwD0AHnT3wwAe7P4thNimrOjsvsxc989y98cBvBvAfd32+wC8Z1NmKITYEFZbn73YreB6HsB33P17AHa7+xQAdH/z93tCiC1nVc7u7m13vwXAfgC3m9lNqx3AzI6Z2QkzO7FU5994E0JsLle1G+/uFwH8B4CjAM6Z2V4A6P4+T/ocd/cj7n4kykYjhNhcVnR2M9tpZqPdx30AfhnA4wDuB3B399/uBvDNzZqkEGL9rCYQZi+A+8ysiOUXh6+6+z+b2X8B+KqZfQTAGQDvX+lAZkCxnJYuRsd4oMMgCcZoN7jQEElvrXYgr0Xlcwrp5bLgNbMQ5RErcGmlUAoCUMr8vPuIxDM0xAM4dg+OUNtgleenGwhy11WqacmrEcR2zJFcgwCwSAKogDiwqUZkykoQTBRJaLzsEmAFPg8PchE2Gs1ke6WSbgeASpnPg7Gis7v7IwBuTbTPALjzqkcUQmwJ+gadEJkgZxciE+TsQmSCnF2ITJCzC5EJFkkCGz6Y2QsAnun+OQFgumeDczSPl6N5vJxX2zxe7+7JBIA9dfaXDWx2wt2PbMngmofmkeE89DZeiEyQswuRCVvp7Me3cOwr0Txejubxcl4z89iyz+xCiN6it/FCZMKWOLuZHTWzJ8zsKTPbstx1ZnbazB41s4fN7EQPx73XzM6b2ckr2sbM7Dtm9mT3944tmscnzey57po8bGbv7ME8DpjZv5vZKTN7zMx+v9ve0zUJ5tHTNTGzmpn9t5n9uDuPP+m2r2893L2nPwCKAP4XwLUAKgB+DOCGXs+jO5fTACa2YNy3AbgNwMkr2v4MwD3dx/cA+NMtmscnAfxhj9djL4Dbuo+HAPwEwA29XpNgHj1dEywXCBzsPi4D+B6At653Pbbizn47gKfc/Wl3bwD4eywnr8wGd38IwIVXNPc8gSeZR89x9yl3/2H38WUApwDsQ4/XJJhHT/FlNjzJ61Y4+z4Az17x9yS2YEG7OIBvm9kPzOzYFs3hJbZTAs+Pmtkj3bf5m/5x4krM7CCW8ydsaVLTV8wD6PGabEaS161w9lTqlq2SBO5w99sA/CqA3zOzt23RPLYTnwNwHZZrBEwB+HSvBjazQQBfA/Axd5/t1birmEfP18TXkeSVsRXOPgngysLe+wGc3YJ5wN3Pdn+fB/ANLH/E2CpWlcBzs3H3c90LrQPg8+jRmphZGcsO9iV3/3q3uedrkprHVq1Jd+yrTvLK2Apn/z6Aw2Z2yMwqAD6I5eSVPcXMBsxs6KXHAO4CcDLutalsiwSeL11MXd6LHqyJLdfB+gKAU+7+mStMPV0TNo9er8mmJXnt1Q7jK3Yb34nlnc7/BfBHWzSHa7GsBPwYwGO9nAeAL2P57WATy+90PgJgHMtltJ7s/h7bonn8DYBHATzSvbj29mAev4Dlj3KPAHi4+/POXq9JMI+ergmAmwH8qDveSQB/3G1f13roG3RCZIK+QSdEJsjZhcgEObsQmSBnFyIT5OxCZIKcXYhMkLMLkQlydiEy4f8ADZXrwg5GhOkAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "init_image = x_test[1, :, :, :]\n",
    "target_image = x_test[3, :, :, :]\n",
    "\n",
    "print(\"Target image is: \", np.argmax(classifier.predict(np.array([target_image]))[0]))\n",
    "plt.imshow((target_image * 255).astype(np.uint))\n",
    "plt.show()\n",
    "print(\"Init image is: \", np.argmax(classifier.predict(np.array([init_image]))[0]))\n",
    "plt.imshow((init_image * 255).astype(np.uint))\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# GRAPHITE Blackbox Attack\n",
    "\n",
    "Finally, run the example attack over a GRAPHITEBlackbox instance. We provide the noise size and net size for the CIFAR-10 dataset and model, and run over 50 transforms. We optionally specify additional arguments at the end for this particular example."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0. 0. 0. 1. 0. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 0. 0. 0. 1. 0.]\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "print(y_test[0], y_test[1])\n",
    "attack = GRAPHITEBlackbox(classifier, (32, 32), (32, 32), (4, 4), batch_size = 1, num_xforms_mask = 50, num_xforms_boost = 50, heatmap_mode = 'Target', num_boost_queries = 200 * 50, blur_kernels = [1], tr_lo = 0.4, tr_hi = 0.6)\n",
    "x_adv = attack.generate(x=x_test[1, :, :, :][np.newaxis, :, :, :], y=y_test[3][np.newaxis, :], mask=None, x_tar=x_test[3, :, :, :][np.newaxis, :, :, :])\n",
    "plt.imshow(x_adv[0])\n",
    "plt.show(block=False)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
